#pragma once

#include <memory>
#include <string>
#include <vector>

#include <ros/builtin_message_traits.h>
#include <ros/message_operations.h>
#include <ros/serialization.h>
#include <ros/types.h>

#include "ActDemoActionGoal.h"
#include "ActDemoActionFeedback.h"
#include "ActDemoActionResult.h"

namespace ros1_protobuf_msg_bridge {
template <class ContainerAllocator>
    struct ActDemoAction_ {
        typedef ActDemoAction_<ContainerAllocator> Type;

        ActDemoAction_() : action_goal(), action_result(), action_feedback() {
        }
        ActDemoAction_(const ContainerAllocator &_alloc) : action_goal(_alloc), action_result(_alloc), action_feedback(_alloc) {
            (void)_alloc;
        }

        typedef ::ros1_protobuf_msg_bridge::ActDemoActionGoal_<ContainerAllocator> _action_goal_type;
        _action_goal_type action_goal;

        typedef ::ros1_protobuf_msg_bridge::ActDemoActionResult_<ContainerAllocator> _action_result_type;
        _action_result_type action_result;

        typedef ::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator> _action_feedback_type;
        _action_feedback_type action_feedback;

        typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoAction_<ContainerAllocator>> Ptr;
        typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoAction_<ContainerAllocator> const> ConstPtr;
    }; // struct ActDemoAction_

    typedef ::ros1_protobuf_msg_bridge::ActDemoAction_<std::allocator<void>> ActDemoAction;

    typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoAction> ActDemoActionPtr;
    typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoAction const> ActDemoActionConstPtr;
} // namespace ros1_protobuf_msg_bridge

namespace ros { namespace message_traits {
    template <class ContainerAllocator>
    struct MD5Sum<::ros1_protobuf_msg_bridge::ActDemoAction_<ContainerAllocator>> {
        static const char *value() {
            return "f01e6f3f21fe6bb8e04d89e27b67d123";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoAction_<ContainerAllocator> &) {
            return value();
        }
    };

    template <class ContainerAllocator>
    struct DataType<::ros1_protobuf_msg_bridge::ActDemoAction_<ContainerAllocator>> {
        static const char *value() {
            return "ros1_protobuf_msg_bridge/ActDemoAction";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoAction_<ContainerAllocator> &) {
            return value();
        }
    };
}} // namespace ros::message_traits

namespace ros { namespace serialization {
template <class ContainerAllocator>
    struct Serializer<::ros1_protobuf_msg_bridge::ActDemoAction_<ContainerAllocator>> {
        template <typename Stream, typename T>
        inline static void allInOne(Stream &stream, T m) {
            stream.next(m.action_goal);
            stream.next(m.action_result);
            stream.next(m.action_feedback);
        }

        ROS_DECLARE_ALLINONE_SERIALIZER
    }; // struct ActDemoAction_
}} // namespace ros::serialization
